<?php

/**
 * @author jackson<jackson_xu@outlook.com>
 * @access public
 * 节点数组重组
 */
function node_merge($nodes, $access = NULL, $pid = 0, $lang) {
    //获取语言变量
    $lang = what_lang($lang);

    $arr = array();
    $nodes = checkDataByLang($nodes, $lang);
    foreach ($nodes as $node) {

        if (is_array($access)) {
            $node['access'] = in_array($node['id'], $access) ? 1 : 0;
        }

        if ($node['pid'] == $pid) {
            $node['child'] = node_merge($nodes, $access, $node['id'], $lang);
            $arr[] = $node;
        }
    }
    return $arr;
}

/**
 * 检测用户是否登录
 * @return integer 0-未登录，大于0-当前登录用户ID
 */
function is_login() {
    $user = session('user_auth');
    if (empty($user)) {
        return 0;
    } else {
        return session('user_auth_sign') == data_auth_sign($user) ? $user['uid'] : 0;
    }
}

/**
 * 数据签名认证
 * @param  array  $data 被认证的数据
 * @return string       签名
 */
function data_auth_sign($data) {
    //数据类型检测
    if (!is_array($data)) {
        $data = (array) $data;
    }
    ksort($data); //排序
    $code = http_build_query($data); //url编码并生成query字符串
    $sign = sha1($code); //生成签名
    return $sign;
}

//公共查询条件
function searchConditionByActive($val = 0) {
    $map['is_active'] = $val;
    return $map;
}

//选择符合语言环境的数据
function checkDataByLang($arr, $lang) {
    //获取语言变量
    $lang = what_lang($lang);

    foreach ($arr as $key => $value) {
        foreach ($value["tran"] as $num => $tran) {
            if ($tran["lang_id"] == $lang) {
                $arr[$key]["tran_name"] = $tran["name"];
            }
            unset($arr[$key]["tran"]);
        }
    }
    return $arr;
}

/**
 * format_bytes
 * 格式化字节大小
 * 
 * @access public
 * @param  number $size      字节数
 * @param  string $delimiter 数字和单位分隔符
 * @return string            格式化后的带单位的大小
 * @author  fangzheng<zheng.fang@wemax.org> 
 */
function format_bytes($size, $delimiter = '') {
    $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
    for ($i = 0; $size >= 1024 && $i < 5; $i++)
        $size /= 1024;
    return round($size, 2) . $delimiter . $units[$i];
}

/**
 * 判断语言环境
 * @param  int $lang_id 语言id
 * @return int       语言id
 */
function what_lang($lang_id) {
    if (!$lang_id) {
        $lang_id = cookie('think_language') == "zh-cn" ? 1 : 2;
    }
    return $lang_id;
}

/**
 * 处理插件钩子
 * @param string $hook   钩子名称
 * @param mixed $params 传入参数
 * @return void
 */
function hook($hook, $params = array()) {
    \Think\Hook::listen($hook, $params);
}
